#include "NetCDFReader.h"
#include <windows.h>
/*
    以一个简易天气数据为例，展示如何使用NetCDFReader类 
*/

int main() {
    
    NetCDFWriter ncWriter;  // 创建NetCDF文件操作对象
    
    // 1. 创建文件（使用NetCDF-4格式）
    ncWriter.open("weather_data.nc");
    
    // 2. 定义维度（时间、纬度、经度）
    // 时间维度：24小时制数据
    ncWriter.addDimension("time", 24);     // 纬度分辨率1度
    ncWriter.addDimension("lat", 180);     // 覆盖-90°到+90°
    ncWriter.addDimension("lon", 360);     // 覆盖-180°到+180°
    
    // 3. 定义变量（定义变量的时候便要确定变量的数据类型、维度）
    ncWriter.addVariable("temperature", NC_FLOAT, {"lat", "lon"});  // NC_FLOAT表示32位浮点
    ncWriter.addVariable("temperature3D", NC_FLOAT, {"time", "lat", "lon"});  // 三维数据版本（时间维度在前）
    ncWriter.addVariable("lat", NC_INT, {"lat"});  // NC_FLOAT表示32位浮点
    ncWriter.addVariable("lon", NC_INT, {"lon"});  // 三维数据版本（时间维度在前）
    
    // 4. 添加全局属性（根据需要添加）
    ncWriter.addGlobalAttribute("author", "f1nch7");  // 作者
    ncWriter.addGlobalAttribute("version", 0.1);      // 数据格式版本balabala
    ncWriter.addGlobalAttribute("date", "2025-02-28");      // 数据格式版本balabala
    ncWriter.addGlobalAttribute("description", "this is a example");  // 数据内容描述
    
    // 5. 写入数据
    std::vector<float> tempData(180 * 360, 25.5f);  // 创建一个包含25.5°C的浮点数数组，大小为180×360
    std::vector<float> tempData3D(24 * 180 * 360, 25.5f);  // 三维数据（time×lat×lon）
    std::vector<int> tempData_lat;
    std::vector<int> tempData_lon;
    for (size_t i = 0; i < 180; i++) {
        tempData_lat.push_back(i - 90);
    }
    for (size_t i = 0; i < 360; i++) {
        tempData_lon.push_back(i - 180); 
    }
    
    ncWriter.writeVariableData("temperature", tempData);        // 写入二维数据
    ncWriter.writeVariableData("temperature3D", tempData3D);    // 写入三维数据
    ncWriter.writeVariableData("lat", tempData_lat);            // 写入lat数据
    ncWriter.writeVariableData("lon", tempData_lon);            // 写入lon数据   
        
    // 6. 关闭文件
    ncWriter.close();
    
    return 0;
}